#include "systick.h"

//计数个数
int f_us=9;
int f_ms=9000;

void Systick_Delay_Init(void)
{
	//设置外部源时钟 72MHZ/8=9MHZ
	SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);//9MHZ
}

//最多能计16,777,216个数，延时最多延时1,864,135us
void Systick_Delay_Us(u32 us)//1us计9个数，500us计500*9
{
	u32 temp;
	//重装载寄存器赋值
	SysTick->LOAD = us*f_us-1;
	
	//计数器赋值为0，防止误差,只有VAL为0时，重装载寄存器才会赋值给它
	SysTick->VAL=0X00;
	
	//使能定时器
	SysTick->CTRL|=(0X01<<0);
	
	do
	{
		temp=SysTick->CTRL;
	}//判断定时器是否开启，以及定时器是否计算完毕
	while((temp&(0x01<<0))&&(!(temp&(0x01<<16))));
	
	//关闭定时器
	SysTick->CTRL&=~(0X01<<0);
}

//最多能计16,777,216个数，延时最多延时1,864ms
void Systick_Delay_Ms(u16 ms)
{
	u32 temp;
	//重装载寄存器赋值
	SysTick->LOAD = ms*f_ms-1;
	
	//计数器赋值为0，防止误差,只有VAL为0时，重装载寄存器才会赋值给它
	SysTick->VAL=0X00;
	
	//使能定时器
	SysTick->CTRL|=(0X01<<0);
	
	do
	{
		temp=SysTick->CTRL;
	}//判断定时器是否开启，以及定时器是否计算完毕
	while((temp&(0x01<<0))&&(!(temp&(0x01<<16))));
	
	//关闭定时器
	SysTick->CTRL&=~(0X01<<0);
}

void Systick_Delay_S(u8 s)
{
	int n;
	for(n=0;n<s;n++)
	{
		Systick_Delay_Ms(1000);
	}
}

